package tech.heptagram.staff.cas.service.staff;

import java.util.List;

import tech.heptagram.staff.cas.domain.info.MenuInfo;
import tech.heptagram.staff.cas.domain.info.MenuTreeVo;
import tech.heptagram.staff.cas.domain.po.Menu;

/**
 * 菜单服务
 * Created by yang on 2017/7/6.
 */
public interface CasMenuService {
    /**
     * 保存菜单
     *
     * @param menu menuVo
     * @return menu Id
     */
    Integer save(Menu menu);

    /**
     * 删除菜单
     */
    void delete(Integer id, String deletedBy);

    /**
     * 更新菜单
     */
    void update(Menu menu);

    MenuTreeVo findTree(Integer parentId);

    /**
     * 获取指定角色的菜单ID列表
     *
     * @param roleId
     * @return
     */
    List<Integer> findIdsByRoleId(Integer roleId);

    /**
     * 根据父菜单ID获取子菜单列表
     *
     * @param parentId 父菜单ID
     * @return 子菜单列表
     */
    List<Menu> findByParentId(Integer parentId);

    /**
     * 获取指定ID的菜单信息
     *
     * @param id 菜单ID
     * @return menu vo
     */
    Menu findById(Integer id);

    /**
     * 获取菜单信息
     */
    List<Menu> findByPath(String path);

    /**
     * 获取指定员工所属指定菜单的操作权限
     *
     * @param staffCode
     * @param menuId
     * @return
     */
    List<Menu> findOperateByStaffCodeAndMenuId(String staffCode, Integer menuId);

    /**
     * 获取指定员工的操作权限列表
     *
     * @param staffCode
     * @return
     */
    List<Menu> findOperateByStaffCode(String staffCode);

    /**
     * 获取指定员工可以看到的菜单树
     *
     * @param staffCode
     * @return
     */
    MenuInfo findMenusByStaffCode(String staffCode);

    /**
     * 获取指定员工可以看到的菜单树
     *
     * @param staffCode
     * @return
     */
    MenuInfo findMenusByStaffCode(String staffCode, String menuApp);
}
